package LeetCodeHot100TopInterview;

public class Q162_FindPeak {

    //寻找数组峰值
    //二分的局部最值问题
    //两边题意规定无限小
    public int findPeakElement(int[] nums) {

        if (nums == null){
            return  -1;
        }
        //先洗掉两端  不然在下面的流程中会导致越界
        if (nums.length == 1 || nums[0] > nums[1]){
            return 0;
        }
        if (nums[nums.length - 1] > nums[nums.length - 2]){
            return nums.length - 1;
        }



        int mid = 0;
        int left = 0;
        int right = nums.length - 1;

        while (left <= right){
            mid = (left + right) / 2;
            //target
            if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]){
                return mid;
            }else if (nums[mid] > nums[mid - 1] && nums[mid] < nums[mid + 1]){
                left = mid + 1;
            }else { //省代码  因为其他结果不影响 怎么走都行
                //不能mid - 1 会导致提前越界
                //边界问题
                right = mid;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        Q162_FindPeak fun = new Q162_FindPeak();
        System.out.println(fun.findPeakElement(new int[]{
                3, 4, 3, 2, 1
        }));
    }
}
